Amazon Athena CloudFormationでSaved Queries(NamedQuery)にクエリーを登録してみる
Amazon Athena初のCloudFormation対応ということで、Saved Queries(NamedQuery)にクエリーを登録を試してみました。Athenaはよく使うクエリーを事前に登録できる機能があり、そのクエリーのことをNamedQueryと呼びます。
クエリーの登録
構文
AWS CloudFormationテンプレートでこのエンティティを宣言するには、次の構文を使用します。
- JSON
{ "Type" : "AWS::Athena::NamedQuery", "Properties" : { "Description" : String, "QueryString" : String, "Database" : String, "Name" : String } }
- YAML
Type: "AWS::Athena::NamedQuery" Properties: Description: String QueryString: String Database: String Name: String
CloudFormationテンプレートの用意
今回は誰でも環境を再現できるように、全てのAWSユーザーにサンプルとして登録されているsampledbのelb_logsテーブルに対するクエリーを登録してみます。エスケープ文字などの考慮はしたくないので、CloudFormationテンプレートはYAMLで作成しました。
なお、登録するクエリーServerResponses
はELB毎かつレスポンスコード毎のカウント数を表示するクエリーです。
Resources: AthenaNamedQuery: Type: AWS::Athena::NamedQuery Properties: Database: "sampledb" Description: "A query that selects responses aggregated data" Name: "ServerResponses" QueryString: > SELECT elbname, backendresponsecode, count(*) AS num FROM elb_logs GROUP BY 2,1 ORDER BY 2,1
スタックの作成
テンプレートファイル(ServerResponses.template)を Amazon S3 にアップロードして、スタックを作成します。
スタックの名前はServerResponsesと設定しました。オプションは設定不要です。設定した内容は以下のとおりです。
1分以内に登録完了です。
確認
Athenaコンソールの Saved Queries の先頭に追加されていることが確認できます。
AWSCLIからも以下のように確認できます。
$ aws athena list-named-queries { "NamedQueryIds": [ "4f0c46de-e80e-462d-a83f-d2ba77f6a0e5", "749f4ca9-92b2-4eed-9c71-3b2bfc6b4e75", "fb829aa7-fc70-4f60-9831-230aefa09b87", "5616ea97-1350-4a98-973b-71aa6802001a", "35985ded-7546-4dc5-8bc8-75cb4c829f2b", "ed65168c-a79c-47ec-a61a-70932ba30eb0", "4d2e5479-46ac-451f-ac62-3179fe344533", "115890c1-6002-44b8-9f98-ecab0515ba4d" ] } $ aws athena get-named-query --named-query-id 4f0c46de-e80e-462d-a83f-d2ba77f6a0e5 { "NamedQuery": { "Database": "sampledb", "QueryString": "SELECT elbname, backendresponsecode, count(*) AS num FROM elb_logs GROUP BY 2,1 ORDER BY 2,1\n", "Name": "ServerResponses", "NamedQueryId": "4f0c46de-e80e-462d-a83f-d2ba77f6a0e5", "Description": "A query that selects responses aggregated data" } }
最後に
SavedQueriesは、よく使うクエリーや雛形を事前に登録しておき、簡単に呼び出すことができます。これを一括で登録・更新・削除、またコード管理できるのは有効です。 他にもAPIが提供されているので順次CloudFormation対応が望まれます。